package com.wsg.dep.demo;


public class DisruptorDemo {
    public static void main(String[] args) throws InterruptedException {
        // 1. 创建事件工厂
//        LongEventFactory factory = new LongEventFactory();
//
//        // 2. 指定RingBuffer大小（必须是2的幂次方）
//        int bufferSize = 1024;
//
//        // 3. 创建Disruptor
//        Disruptor<LongEvent> disruptor = new Disruptor<>(
//            factory,
//            bufferSize,
//            DaemonThreadFactory.INSTANCE,
//            ProducerType.SINGLE, // 单生产者模式
//            new YieldingWaitStrategy()
//        );
//
//        // 4. 注册事件处理器
//        disruptor.handleEventsWith(new LongEventHandler(total, latch));
//
//        // 5. 启动Disruptor
//        disruptor.start();
//
//        // 6. 发布事件
//        RingBuffer<LongEvent> ringBuffer = disruptor.getRingBuffer();
//        long l = System.currentTimeMillis();
//        int total = 5000 * 10000;
//
//        List<Thread> threads = new ArrayList<>();
//        int threadNum = 10;
//        for (int i = 0; i < threadNum; i++) {
//            int finalTotal = total;
//            Thread thread = new Thread(new Runnable() {
//                public void run() {
//                    long l = System.currentTimeMillis();
//                    for (long i = 0; i < finalTotal; i++) {
//                        long sequence = ringBuffer.next(); // 获取下一个可用序列号
//                        try {
//                            LongEvent event = ringBuffer.get(sequence); // 获取事件对象
//                            event.set(i); // 设置事件数据
//                        } finally {
//                            ringBuffer.publish(sequence); // 发布事件
//                        }
//                    }
//                    System.out.println(Thread.currentThread().getName() + "-消费速度" + finalTotal / 10000 + "万条用时："
//                            + (System.currentTimeMillis() - l) + "毫秒" + " , QPS：" + finalTotal / ((System.currentTimeMillis() - l) / 1000.0) + "条/秒");
//
//                }
//            }, "生产" + i);
//            thread.start();
//            threads.add(thread);
//        }
//
//        for(Thread thread : threads){
//            thread.join();
//        }
//        total = total * threadNum;
//
//
//        System.out.println("总的消费速度" + total / 10000 + "万条用时："
//                + (System.currentTimeMillis() - l) + "毫秒" + " , QPS：" + total / ((System.currentTimeMillis() - l) / 1000.0)+"条/秒");
        // 7. 关闭Disruptor
//        disruptor.shutdown();
    }
}